home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / PowerMacOberon 1.2 / Source / Tools / Batch.Mod (.txt) < prev    next >
Oberon Text  |  1995-08-22  |  2KB  |  59 lines

  1. Syntax10.Scn.Fnt
  2. StampElems
  3. Alloc
  4. 22 Aug 95
  5. MODULE Batch; (* mah 
  6.     Batch execution Batch.Start ('^' | name)
  7.     If file 'name' does not exist the text trailing the command is taken as batch job.
  8.     Every line starting with a command (no leading spaces) is executed. Lines with leading
  9.     spaces are omitted. If a line starts with the char '~' the batch job is terminated.
  10. IMPORT Texts, Oberon;
  11.     w : Texts.Writer;
  12. PROCEDURE Start*;
  13.         S: Texts.Scanner; beg, end, time: LONGINT; res: INTEGER;
  14.         text: Texts.Text; sel: BOOLEAN; p: Oberon.ParList; ch: CHAR;
  15. BEGIN
  16.     sel:= FALSE; Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S); 
  17.     IF (S.class = Texts.Char) & (S.c = "^") THEN
  18.         Oberon.GetSelection(text, beg, end, time); sel:= TRUE;
  19.         IF time >= 0 THEN Texts.OpenScanner(S, text, beg); Texts.Scan(S) END
  20.     END;
  21.     IF (S.class # Texts.Name) & (S.class # Texts.String) THEN RETURN END;
  22.     NEW (text); Texts.Open (text, S.s);
  23.     IF sel & (text.len = 0) THEN RETURN END;     
  24.     NEW (p);
  25.     IF text.len # 0 THEN
  26.         Oberon.Par.text:=  text; beg:=  0
  27.     ELSE 
  28.         Texts.OpenReader (S, Oberon.Par.text, Oberon.Par.pos);
  29.         REPEAT Texts.Read (S, ch) UNTIL S.eot OR (ch = CHR(13));
  30.         beg:= Texts.Pos (S)
  31.     END;
  32.     Texts.OpenReader (S, Oberon.Par.text, beg); Texts.Read (S, ch);
  33.     Texts.OpenScanner (S, Oberon.Par.text, beg); Texts.Scan (S);
  34.     WHILE (CAP(ch) >= 'A') & (CAP(ch) <= 'Z') DO
  35.         Oberon.Par.pos:= Texts.Pos (S);
  36.         (* called command could change Oberon.Par.text, so save and restore it! *)
  37.         p^:= Oberon.Par^; Oberon.Call (S.s, Oberon.Par, FALSE, res); Oberon.Par^:= p^;
  38.         IF res # 0 THEN
  39.             Texts.WriteString (w, "Call error: "); Texts.WriteInt (w, res, 0); Texts.WriteLn (w);
  40.             Texts.Append (Oberon.Log, w.buf);
  41.             RETURN
  42.         END;
  43.         Texts.OpenReader (S, Oberon.Par.text, Texts.Pos (S)-1); Texts.Read (S, ch);
  44.         REPEAT
  45.             WHILE ~S.eot & (ch # CHR(13)) DO
  46.                 Texts.Read (S, ch)
  47.             END;
  48.             Texts.Read (S, ch)
  49.         UNTIL S.eot OR ((CAP(ch) >= 'A') & (CAP(ch) <= 'Z')) OR (ch= '~' );
  50.         Texts.OpenScanner (S, Oberon.Par.text, Texts.Pos (S)-1); Texts.Scan (S)
  51. END Start;
  52. BEGIN
  53.     Texts.OpenWriter (w)
  54. END Batch.Start
  55. System.ShowCommands System ~
  56. Browser.ShowDef TextFrames ~
  57. System.Directory *.Mod
  58. Browser.ShowDef TextFrames ~
  59.